#ifndef __MYMATH_H__
#define __MYMATH_H__
/**************文件说明**********************
常用初等函数的快速算法
Authored by Zhang Hangning, origin at 2016.10
与库函数冲突的函数加前缀"M"
函数目录(括号内为定义域和值域):
正弦函数      Msin(x)     [-pi/2,pi/2]    [-1,1]
余弦函数      Mcos(x)     [-pi/2,pi/2]    [-1,1]
反正切函数1   Matan(x)    (-∞,∞)          (-pi/2,pi/2)
反正切函数2   Matan2(y,x) (-∞,∞)          (-pi/2,pi/2)
反正弦函数    Masin(x)    [-1,1]          [-pi/2,pi/2]
反余弦函数    Macos(x)    [-1,1]          [0,pi]
平方根函数    Msqrt       [0,∞)           [0,∞)
平方根倒数    Q_rsqrt     (0,∞)           (0,∞)
自然指数函数  Mexp        (-∞,∞)          (0,∞)
自然对数函数  Mln         (0,∞)           (-∞,∞)
绝对值        ABS
符号          SIGN
饱和          LIMIT
较小值        MIN
较大值        MAX
********************************************/

#define PI                       3.14159265f
#define ABS(x)                   ((x)>=0?(x):-(x))
#define SIGN(x)                  ((x)>=0?1:-1)
#define LIMIT(x,min,max)         (((x)<=(min) ? (min) : ((x)>=(max) ? (max) : (x))))
#define MIN(a,b)                 ((a)<(b)?(a):(b))
#define MAX(a,b)                 ((a)>(b)?(a):(b))
//余弦函数.定义域[-pi,pi],值域[-1,1]
#define Mcos(rad)                Msin(PI/2.0f-ABS(rad))
//反余弦函数.定义域[-1,1],值域[-pi/2,pi/2]
#define Macos(rad)               (PI/2+Masin(-(rad)))
//对数函数.定义域(0,∞),值域(-∞,∞)
#define Mln(x)                   (6.0f*((x)-1.0f)/((x)+1.0f+4.0f*Msqrt(x)))
//反正切函数.定义域(-∞,∞),值域(-pi/2,pi/2)
float Matan(float rad);
//360°反正切.定义域(-∞,∞),值域(-pi,pi]
float Matan2(float y,float x);
//快速平方根算法
float Msqrt(float number);
//快速平方根倒数算法
float Q_rsqrt(float number);
//反正弦函数.定义域[-1,1],值域[-pi/2,pi/2]
float Masin(float x);
//正弦函数.定义域[-pi,pi],值域[-1,1]
float Msin(float rad);
//指数函数.定义域(-∞,∞),值域(-∞,∞)
float Mexp(float x);

#endif
